{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f3f38beb",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e08e6f2e",
   "metadata": {},
   "source": [
    "$$f(x) = \\frac{1}{1 + e^{-x}}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "a1fd0b01",
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\"\n",
    "sigmoid函数\n",
    "x:float\n",
    "return:float y\n",
    "\"\"\"\n",
    "def sigmoid(x):\n",
    "    return 1/(1+np.exp(-x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "40c31125",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.arange(-30, 30, 0.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "daad9a00",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-30. , -29.5, -29. , -28.5, -28. , -27.5, -27. , -26.5, -26. ,\n",
       "       -25.5, -25. , -24.5, -24. , -23.5, -23. , -22.5, -22. , -21.5,\n",
       "       -21. , -20.5, -20. , -19.5, -19. , -18.5, -18. , -17.5, -17. ,\n",
       "       -16.5, -16. , -15.5, -15. , -14.5, -14. , -13.5, -13. , -12.5,\n",
       "       -12. , -11.5, -11. , -10.5, -10. ,  -9.5,  -9. ,  -8.5,  -8. ,\n",
       "        -7.5,  -7. ,  -6.5,  -6. ,  -5.5,  -5. ,  -4.5,  -4. ,  -3.5,\n",
       "        -3. ,  -2.5,  -2. ,  -1.5,  -1. ,  -0.5,   0. ,   0.5,   1. ,\n",
       "         1.5,   2. ,   2.5,   3. ,   3.5,   4. ,   4.5,   5. ,   5.5,\n",
       "         6. ,   6.5,   7. ,   7.5,   8. ,   8.5,   9. ,   9.5,  10. ,\n",
       "        10.5,  11. ,  11.5,  12. ,  12.5,  13. ,  13.5,  14. ,  14.5,\n",
       "        15. ,  15.5,  16. ,  16.5,  17. ,  17.5,  18. ,  18.5,  19. ,\n",
       "        19.5,  20. ,  20.5,  21. ,  21.5,  22. ,  22.5,  23. ,  23.5,\n",
       "        24. ,  24.5,  25. ,  25.5,  26. ,  26.5,  27. ,  27.5,  28. ,\n",
       "        28.5,  29. ,  29.5])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c189d7ba",
   "metadata": {},
   "outputs": [],
   "source": [
    "y = [sigmoid(i) for i in x]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "833d6305",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[9.357622968839299e-14,\n",
       " 1.5428112031916497e-13,\n",
       " 2.543665647376276e-13,\n",
       " 4.193795658377786e-13,\n",
       " 6.914400106935423e-13,\n",
       " 1.1399918530430558e-12,\n",
       " 1.8795288165355508e-12,\n",
       " 3.0988191387122225e-12,\n",
       " 5.109089028037221e-12,\n",
       " 8.423463754397692e-12,\n",
       " 1.3887943864771144e-11,\n",
       " 2.289734845593124e-11,\n",
       " 3.7751345441365816e-11,\n",
       " 6.224144622520383e-11,\n",
       " 1.0261879630648827e-10,\n",
       " 1.6918979223288784e-10,\n",
       " 2.7894680920908113e-10,\n",
       " 4.599055376537186e-10,\n",
       " 7.582560422162385e-10,\n",
       " 1.2501528648238605e-09,\n",
       " 2.0611536181902037e-09,\n",
       " 3.398267807946847e-09,\n",
       " 5.602796406145941e-09,\n",
       " 9.23744957664012e-09,\n",
       " 1.522997951276035e-08,\n",
       " 2.5109990926928157e-08,\n",
       " 4.1399375473943306e-08,\n",
       " 6.825602910446286e-08,\n",
       " 1.12535162055095e-07,\n",
       " 1.8553910183683314e-07,\n",
       " 3.059022269256247e-07,\n",
       " 5.043474082014517e-07,\n",
       " 8.315280276641321e-07,\n",
       " 1.3709572068578448e-06,\n",
       " 2.2603242979035746e-06,\n",
       " 3.726639284186561e-06,\n",
       " 6.144174602214718e-06,\n",
       " 1.0129990980873921e-05,\n",
       " 1.670142184809518e-05,\n",
       " 2.7535691114583473e-05,\n",
       " 4.5397868702434395e-05,\n",
       " 7.484622751061123e-05,\n",
       " 0.00012339457598623172,\n",
       " 0.00020342697805520653,\n",
       " 0.0003353501304664781,\n",
       " 0.0005527786369235996,\n",
       " 0.0009110511944006454,\n",
       " 0.0015011822567369917,\n",
       " 0.0024726231566347743,\n",
       " 0.004070137715896128,\n",
       " 0.0066928509242848554,\n",
       " 0.01098694263059318,\n",
       " 0.01798620996209156,\n",
       " 0.02931223075135632,\n",
       " 0.04742587317756678,\n",
       " 0.07585818002124355,\n",
       " 0.11920292202211755,\n",
       " 0.18242552380635635,\n",
       " 0.2689414213699951,\n",
       " 0.3775406687981454,\n",
       " 0.5,\n",
       " 0.6224593312018546,\n",
       " 0.7310585786300049,\n",
       " 0.8175744761936437,\n",
       " 0.8807970779778823,\n",
       " 0.9241418199787566,\n",
       " 0.9525741268224334,\n",
       " 0.9706877692486436,\n",
       " 0.9820137900379085,\n",
       " 0.9890130573694068,\n",
       " 0.9933071490757153,\n",
       " 0.995929862284104,\n",
       " 0.9975273768433653,\n",
       " 0.998498817743263,\n",
       " 0.9990889488055994,\n",
       " 0.9994472213630764,\n",
       " 0.9996646498695336,\n",
       " 0.9997965730219448,\n",
       " 0.9998766054240137,\n",
       " 0.9999251537724895,\n",
       " 0.9999546021312976,\n",
       " 0.9999724643088853,\n",
       " 0.999983298578152,\n",
       " 0.9999898700090192,\n",
       " 0.9999938558253978,\n",
       " 0.9999962733607158,\n",
       " 0.999997739675702,\n",
       " 0.999998629042793,\n",
       " 0.9999991684719722,\n",
       " 0.9999994956525918,\n",
       " 0.999999694097773,\n",
       " 0.9999998144608981,\n",
       " 0.9999998874648379,\n",
       " 0.999999931743971,\n",
       " 0.9999999586006244,\n",
       " 0.999999974890009,\n",
       " 0.9999999847700205,\n",
       " 0.9999999907625504,\n",
       " 0.9999999943972036,\n",
       " 0.9999999966017321,\n",
       " 0.9999999979388463,\n",
       " 0.9999999987498471,\n",
       " 0.9999999992417439,\n",
       " 0.9999999995400946,\n",
       " 0.9999999997210531,\n",
       " 0.9999999998308102,\n",
       " 0.9999999998973812,\n",
       " 0.9999999999377585,\n",
       " 0.9999999999622486,\n",
       " 0.9999999999771028,\n",
       " 0.999999999986112,\n",
       " 0.9999999999915765,\n",
       " 0.999999999994891,\n",
       " 0.9999999999969011,\n",
       " 0.9999999999981204,\n",
       " 0.99999999999886,\n",
       " 0.9999999999993086,\n",
       " 0.9999999999995806,\n",
       " 0.9999999999997455,\n",
       " 0.9999999999998457]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "8a243b48",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'y')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7TUlEQVR4nO3deXxU9b3/8fdMlslGFghZgEAQFESUtEFoQOpFo5EiLdYqP3sLESteEL1qughVQbQSxKp4EaTaCl57FVyxFURoBK0FRTbFBZQ1CGRjSUJIMsnM+f0RZjBmIYEkZ+bM6/kwD5kz3zPzmQMkb77nc77HZhiGIQAAAIuwm10AAABAWyLcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAHg5ptvVmpqqtllNGvfvn2y2WxasmTJGce25vM89thjOu+88xQUFKS0tLRzqrG9rFu3TjabTevWrTO7FMASgs0uAADay+rVq/X73/9ev/rVr/Tggw8qPj7e1HoWLlyoiIgI3XzzzabWAVidjXtLAdZXU1Mjt9sth8NhdilNMgxD1dXVCgkJUVBQULNjb775Zq1bt0779u1rdty0adP02GOPqbKyUqGhoW1Y7dkZOHCg4uPjG8zQuN1uOZ1OhYaGym5nQh04V8zcAAEgJCTE7BLOyGazKSwsrE1fs6ioSOHh4T4RbJpjt9vb/LMDgYx/IgB+rry8XHfffbdSU1PlcDiUkJCgq666Slu2bPGOaaxH5ciRIxo/fryio6MVGxur7Oxsffrppw36Xm6++WZFRUUpPz9f1157raKiotS9e3ctWLBAkrR9+3ZdccUVioyMVK9evfTSSy81qHHPnj264YYb1LlzZ0VEROhHP/qRVqxYUW9MUz03y5cv18CBAxUWFqaBAwfqzTffbNFxsdlsWrx4sSoqKmSz2byv3Vxvj81m04MPPuh9/OCDD8pms2nXrl26+eabFRsbq5iYGE2cOFEnT55ssP/f/vY3DRkyRBEREYqLi9OPf/xjrV69WpKUmpqqL774Qu+//763nv/4j/+Q1HTPzauvvqr09HSFh4crPj5ev/rVr3Tw4MF6Yzy/PwcPHtTYsWMVFRWlrl276re//a1cLleLjhVgNYQbwM9NnjxZzzzzjK6//notXLhQv/3tbxUeHq6vvvqqyX3cbrfGjBmjl19+WdnZ2XrkkUd0+PBhZWdnNzre5XJp1KhRSklJ0dy5c5Wamqo77rhDS5Ys0TXXXKPBgwfr0UcfVadOnTRhwgTt3bvXu29hYaGGDRumd999V7fffrseeeQRVVVV6ac//ekZg8rq1at1/fXXy2azKTc3V2PHjtXEiRO1adOmMx6XF198USNGjJDD4dCLL76oF198UT/+8Y/PuF9jbrzxRpWXlys3N1c33nijlixZolmzZtUbM2vWLI0fP14hISF66KGHNGvWLKWkpOi9996TJM2bN089evRQ//79vfXcd999Tb7nkiVLdOONNyooKEi5ubmaNGmS3njjDV122WU6fvx4vbEul0tZWVnq0qWL/vSnP+nyyy/X448/rmefffasPi/g9wwAfi0mJsaYOnVqs2Oys7ONXr16eR+//vrrhiRj3rx53m0ul8u44oorDEnG4sWL6+0ryZg9e7Z327Fjx4zw8HDDZrMZS5cu9W7fsWOHIcmYOXOmd9vdd99tSDL+9a9/ebeVl5cbvXv3NlJTUw2Xy2UYhmHs3bu3wXunpaUZycnJxvHjx73bVq9ebUiq93ma+9yRkZH1tjX2Ph7fr33mzJmGJOOWW26pN+66664zunTp4n38zTffGHa73bjuuuu8n8fD7XZ7f33RRRcZl19+eYP3Xbt2rSHJWLt2rWEYhuF0Oo2EhARj4MCBRmVlpXfc22+/bUgyZsyYUe8zSjIeeuiheq/5gx/8wEhPT2/wXkAgYOYG8HOxsbH6+OOPdejQoRbvs2rVKoWEhGjSpEnebXa7XVOnTm1yn1tvvbXee/br10+RkZG68cYbvdv79eun2NhY7dmzx7tt5cqVGjJkiC677DLvtqioKN12223at2+fvvzyy0bf7/Dhw9q2bZuys7MVExPj3X7VVVdpwIABLf6sbWHy5Mn1Ho8YMUJHjhxRWVmZpLpTZ263WzNmzGjQEGyz2Vr9fps2bVJRUZFuv/32er04o0ePVv/+/Ruc0muqxu/+PgCBhHAD+Lm5c+fq888/V0pKioYMGaIHH3zwjD/U9u/fr+TkZEVERNTb3rdv30bHh4WFqWvXrvW2xcTEqEePHg1+eMfExOjYsWP13qtfv34NXvPCCy/0Pt9UjZJ0/vnnN3iusddrTz179qz3OC4uTpK8n3P37t2y2+1tFro8n72xz9m/f/8Gx6yx35+4uLh6vw9AICHcAH7uxhtv1J49ezR//nx169ZNjz32mC666CK98847bfYeTV2a3dR2w4dXmGhqJqW55ltf/5xnunQeCDSEG8ACkpOTdfvtt2v58uXau3evunTpokceeaTJ8b169dLhw4cbXPGza9euNq+tV69e2rlzZ4PtO3bs8D7f1H6S9M033zR4rrHXaynPrMv3m3KbmkFqiT59+sjtdjd5is2jpaeoPJ+9sc+5c+fOJo8ZgDqEG8CPuVwulZaW1tuWkJCgbt26qbq6usn9srKyVFNTo+eee867ze12ey/vbks/+clPtHHjRm3YsMG7raKiQs8++6xSU1ObPJWTnJystLQ0vfDCC/U+45o1a84YIpoTHR2t+Ph4ffDBB/W2L1y48Kxfc+zYsbLb7XrooYfkdrvrPffd2Z3IyMgGoaoxgwcPVkJCghYtWlTv9/Gdd97RV199pdGjR591rUAgYBE/wI+Vl5erR48e+sUvfqFBgwYpKipK//znP/XJJ5/o8ccfb3K/sWPHasiQIfrNb36jXbt2qX///vr73/+uo0ePSjq7JtimTJs2TS+//LJGjRql//7v/1bnzp31wgsvaO/evXr99debXZE3NzdXo0eP1mWXXaZbbrlFR48e1fz583XRRRfpxIkTZ13Trbfeqjlz5ujWW2/V4MGD9cEHH+jrr78+69fr27ev7rvvPj388MMaMWKEfv7zn8vhcOiTTz5Rt27dlJubK0lKT0/XM888oz/+8Y/q27evEhISdMUVVzR4vZCQED366KOaOHGiLr/8ct10000qLCzUU089pdTUVN1zzz1nXSsQCAg3gB+LiIjQ7bffrtWrV+uNN96Q2+1W3759tXDhQk2ZMqXJ/YKCgrRixQrdddddeuGFF2S323Xddddp5syZGj58eJuulpuYmKj169fr3nvv1fz581VVVaVLLrlE//jHP844A3HNNdfo1Vdf1f3336/p06erT58+Wrx4sd56661zusnkjBkzVFxcrNdee02vvPKKRo0apXfeeUcJCQln/ZoPPfSQevfurfnz5+u+++5TRESELrnkEo0fP77e++7fv19z585VeXm5Lr/88kbDjVS3OF9ERITmzJmje++9V5GRkbruuuv06KOPKjY29qzrBAIB95YC4LV8+XJdd911+vDDDzV8+HCzywGAs0K4AQJU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XH3H+/bbb42+ffsaV155pfHtt98ahw8f9n55cLxO279/v7F161Zj1qxZRlRUlLF161Zj69atRnl5uWEYhlFbW2sMHDjQuPrqq41t27YZq1atMrp27WpMnz7d5MrNsXTpUsPhcBhLliwxvvzyS+O2224zYmNj611NFqjKy8u9f34kGU888YSxdetWY//+/YZhGMacOXOM2NhY46233jI+++wz42c/+5nRu3dvo7Ky0uTKO96UKVOMmJgYY926dfW+R508edI7ZvLkyUbPnj2N9957z9i0aZORkZFhZGRkmFi1eaZNm2a8//77xt69e43PPvvMmDZtmmGz2YzVq1cbhtHxx4pw0wY+++wzY+TIkUbnzp0Nh8NhpKamGpMnTza+/fbbeuM+/fRT47LLLjMcDofRvXt3Y86cOSZVbK7Fixcbkhr9+i6OV53s7OxGj9XatWu9Y/bt22eMGjXKCA8PN+Lj443f/OY3Rk1NjXlFm2z+/PlGz549jdDQUGPIkCHGRx99ZHZJPmHt2rWN/lnKzs42DKPucvAHHnjASExMNBwOh3HllVcaO3fuNLdokzT1PWrx4sXeMZWVlcbtt99uxMXFGREREcZ1111X7x9pgeSWW24xevXqZYSGhhpdu3Y1rrzySm+wMYyOP1Y2wwigjlcAAGB5XC0FAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADwO8VFxcrKSlJs2fP9m5bv369QkNDlZeXZ2JlAMzAvaUAWMLKlSs1duxYrV+/Xv369VNaWpp+9rOf6YknnjC7NAAdjHADwDKmTp2qf/7znxo8eLC2b9+uTz75RA6Hw+yyAHQwwg0Ay6isrNTAgQN14MABbd68WRdffLHZJQEwAT03ACxj9+7dOnTokNxut/bt22d2OQBMwswNAEtwOp0aMmSI0tLS1K9fP82bN0/bt29XQkKC2aUB6GCEGwCW8Lvf/U6vvfaaPv30U0VFRenyyy9XTEyM3n77bbNLA9DBOC0FwO+tW7dO8+bN04svvqjo6GjZ7Xa9+OKL+te//qVnnnnG7PIAdDBmbgAAgKUwcwMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACyFcAMAACzl/wOzZ8pElAHUYwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x, y)\n",
    "plt.title(\"sigmoid function\")\n",
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"y\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "182f4cba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y_pred= 12\n",
      "L= 22.66  \ty_pred= 9.76  \tw1= 0.44 dw1= 56\n",
      "L= 10.48  \ty_pred= 8.24  \tw1= 0.06 dw1= 38.08\n",
      "L= 4.84  \ty_pred= 7.2  \tw1= -0.2 dw1= 25.89\n",
      "L= 2.24  \ty_pred= 6.5  \tw1= -0.38 dw1= 17.61\n",
      "L= 1.04  \ty_pred= 6.02  \tw1= -0.5 dw1= 11.97\n",
      "L= 0.48  \ty_pred= 5.69  \tw1= -0.58 dw1= 8.14\n",
      "L= 0.22  \ty_pred= 5.47  \tw1= -0.63 dw1= 5.54\n",
      "L= 0.1  \ty_pred= 5.32  \tw1= -0.67 dw1= 3.76\n",
      "L= 0.05  \ty_pred= 5.22  \tw1= -0.7 dw1= 2.56\n",
      "L= 0.02  \ty_pred= 5.15  \tw1= -0.71 dw1= 1.74\n",
      "L= 0.01  \ty_pred= 5.1  \tw1= -0.72 dw1= 1.18\n",
      "L= 0.0  \ty_pred= 5.07  \tw1= -0.73 dw1= 0.8\n",
      "L= 0.0  \ty_pred= 5.05  \tw1= -0.74 dw1= 0.55\n",
      "L= 0.0  \ty_pred= 5.03  \tw1= -0.74 dw1= 0.37\n",
      "L= 0.0  \ty_pred= 5.02  \tw1= -0.74 dw1= 0.25\n",
      "L= 0.0  \ty_pred= 5.01  \tw1= -0.75 dw1= 0.17\n",
      "L= 0.0  \ty_pred= 5.01  \tw1= -0.75 dw1= 0.12\n",
      "L= 0.0  \ty_pred= 5.01  \tw1= -0.75 dw1= 0.08\n",
      "L= 0.0  \ty_pred= 5.0  \tw1= -0.75 dw1= 0.05\n",
      "L= 0.0  \ty_pred= 5.0  \tw1= -0.75 dw1= 0.04\n"
     ]
    }
   ],
   "source": [
    "w1 = 1\n",
    "w2 = 1\n",
    "b = 1\n",
    "x1 = 2\n",
    "x2 = 3\n",
    "y_pred = 8 + 4*w1\n",
    "print('y_pred=', y_pred)\n",
    "for i in range(20):\n",
    "    dw1 = 24 + 32*w1\n",
    "    w1 = w1 - 0.01*dw1\n",
    "    y_pred = 8 + 4*w1 \n",
    "    L = (y_pred - 5)**2\n",
    "    print(\"L=\", round(L,2), \" \ty_pred=\",round(y_pred,2), \" \tw1=\",round(w1,2), \"dw1=\", \tround(dw1,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "d159a400",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\"\"\"\n",
    "激活函数sigmoid\n",
    "\"\"\"\n",
    "def sigmoid(z):\n",
    "    return 1/(1+np.exp(-z))\n",
    "\n",
    "def nn(X, y, m, alpha, num_of_iterations):\n",
    "    b=0\n",
    "    w = np.random.randn(1, X.shape[0]) * 0.01#初始化weight\n",
    "    for iteration in range(num_of_iterations):\n",
    "        J=0#损失值\n",
    "        dw1=0#对w1的偏导\n",
    "        dw2=0#对w2的偏导\n",
    "        db=0#对b的偏导\n",
    "        for i in range(m):\n",
    "            z = np.dot(w, X[:, i]) + b#乘加运算\n",
    "            a = sigmoid(z)#激活\n",
    "            J += - (y[0,i]*np.log(a) + (1-y[0,i])*np.log(1-a))#总共的损失值\n",
    "            dz = a - y[0,i]\n",
    "            dw1 += dz * X[0, i]#w1梯度总值\n",
    "            dw2 += dz * X[1, i]#w2梯度总值\n",
    "            db = db + dz#d梯度总值\n",
    "        J = J / m#平均损失\n",
    "        dw1 = dw1 / m#平均梯度w1\n",
    "        dw2 = dw2 / m#平均梯度w2\n",
    "        db = db / m#平均梯度b\n",
    "        w[0,0] = w[0,0] - alpha * dw1#w1参数更新\n",
    "        w[0,1] = w[0,1] - alpha * dw2#w2参数更新\n",
    "        b = b - alpha * db#b参数更新\n",
    "        if iteration%15 == 0:#迭代15次画图\n",
    "            plt.plot(iteration, J, 'ro')#画图，迭代次数和损失函数的关系\n",
    "    return b, w"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "828fbdbd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-8.53053504] 5.567246075067798 5.567246517976047\n"
     ]
    },
    {
     "data": {
      "image/png": "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IwDQne7CCvNV4kNvwwzPN+oUYQQAequr+SoEFhyvu+cbWX3F2AomwggAhIKVwNK+x8qUKeHuFpGuJyuYunq53dIFF0gNDWEZDmEEACJJWppUUdF1YGH3WgTbkSO+vX3S06UxY0L+7QkjABCNOtu9lttD6K2PPgp5ICGMAEAss3p7iCsuON5HH4X0lg1hBABwjNUrLoSX2DdrVsi+FWEEANBzdsMLt42iR3V1yL4VYQQAEDp2bxux8Vz4DB8esm9FGAEARL7uNp5juXTwrVsXsm9FGAEAxDary6UJM8eMHu37cwsRwggAAF3pbZgxRmpqkq64ItwjsWb0aGn79pB+S8IIAABO69/fd9ujN4HGyRVMffpIubm+q0AhDiKSxEwgAACiSfsKphjClREAABBWhBEAABBWhBEAABBWhBEAABBWhBEAABBWhBEAABBWhBEAABBWhBEAABBWhBEAABBWUbEDqzFGktTY2BjmTgAAgFXtv7fbf493JirCSFNTkyQpKysrzJ0AAAC7mpqalNbFU4ATTHdxJQJ4vV599tlnGjBggBISEoJ23sbGRmVlZammpkapqalBO28kifUxMr7oF+tjjPXxSbE/RsbXc8YYNTU1aejQoUpM7HxmSFRcGUlMTNTpp5/u2PlTU1Nj8gfseLE+RsYX/WJ9jLE+Pin2x8j4eqarKyLtmMAKAADCijACAADCKq7DSHJyskpKSpScnBzuVhwT62NkfNEv1scY6+OTYn+MjM95UTGBFQAAxK64vjICAADCjzACAADCijACAADCijACAADCKq7DyPLly5Wdna2UlBTl5uaqoqIi3C2d5Ne//rUSEhICXuPGjfN//YsvvtCCBQt06qmnqn///vrWt76lurq6gHNUV1dr1qxZ6tevnwYPHqybb75ZR48eDajZtGmTzj//fCUnJ2vMmDFatWqVY2P629/+pq9//esaOnSoEhIS9OSTTwZ83RijRYsWaciQIerbt6/y8/P1j3/8I6Bm//79mj17tlJTU5Wenq7rrrtOBw8eDKh55513NG3aNKWkpCgrK0t33XXXSb08/vjjGjdunFJSUnTuuedq/fr1jo/vBz/4wUmf6WWXXRY14ystLdWUKVM0YMAADR48WFdddZW2bdsWUBPKn8tg/z22Mr7p06ef9Bn++Mc/jorxSdL999+vCRMm+De5ysvL07PPPuv/ejR/flbGF+2f34kWL16shIQE3XTTTf73ou4zNHFq9erVxu12m5UrV5r33nvPzJs3z6Snp5u6urpwtxagpKTEnH322Wb37t3+1549e/xf//GPf2yysrJMWVmZeeutt8wFF1xgLrzwQv/Xjx49as455xyTn59v3n77bbN+/XqTkZFhiouL/TUff/yx6devnykqKjLvv/++ue+++4zL5TIbNmxwZEzr1683t912m1m7dq2RZJ544omAry9evNikpaWZJ5980vz973833/jGN8zIkSPN4cOH/TWXXXaZmThxonn99dfNyy+/bMaMGWOuvvpq/9cbGhqMx+Mxs2fPNlu2bDGPPfaY6du3r/n973/vr3n11VeNy+Uyd911l3n//ffNL3/5S9OnTx/z7rvvOjq+uXPnmssuuyzgM92/f39ATSSPb+bMmeahhx4yW7ZsMVVVVeaKK64ww4cPNwcPHvTXhOrn0om/x1bGd8kll5h58+YFfIYNDQ1RMT5jjHn66afNunXrzIcffmi2bdtmfvGLX5g+ffqYLVu2GGOi+/OzMr5o//yOV1FRYbKzs82ECRPMwoUL/e9H22cYt2Fk6tSpZsGCBf5/b2trM0OHDjWlpaVh7OpkJSUlZuLEiR1+7cCBA6ZPnz7m8ccf97+3detWI8mUl5cbY3y/GBMTE01tba2/5v777zepqammpaXFGGPMv/7rv5qzzz474NwFBQVm5syZQR7NyU78Ze31ek1mZqa5++67/e8dOHDAJCcnm8cee8wYY8z7779vJJk333zTX/Pss8+ahIQE8+mnnxpjjPmv//ovM3DgQP8YjTHmlltuMWPHjvX/+3e/+10za9asgH5yc3PNP//zPzs2PmN8YeTKK6/s9JhoGp8xxtTX1xtJ5qWXXjLGhPbnMhR/j08cnzG+X2bH/x//iaJpfO0GDhxo/vCHP8Tc53fi+IyJnc+vqanJnHHGGWbjxo0BY4rGzzAub9O0traqsrJS+fn5/vcSExOVn5+v8vLyMHbWsX/84x8aOnSoRo0apdmzZ6u6ulqSVFlZqSNHjgSMY9y4cRo+fLh/HOXl5Tr33HPl8Xj8NTNnzlRjY6Pee+89f83x52ivCcefxSeffKLa2tqAftLS0pSbmxswpvT0dE2ePNlfk5+fr8TERL3xxhv+mosvvlhut9tfM3PmTG3btk2ff/65vyZc4960aZMGDx6ssWPHav78+dq3b5//a9E2voaGBknSoEGDJIXu5zJUf49PHF+7P/7xj8rIyNA555yj4uJiHTp0yP+1aBpfW1ubVq9erebmZuXl5cXc53fi+NrFwue3YMECzZo166Q+ovEzjIoH5QXb3r171dbWFvAhSJLH49EHH3wQpq46lpubq1WrVmns2LHavXu3fvOb32jatGnasmWLamtr5Xa7lZ6eHnCMx+NRbW2tJKm2trbDcbZ/rauaxsZGHT58WH379nVodCdr76mjfo7vd/DgwQFfT0pK0qBBgwJqRo4cedI52r82cODATsfdfg6nXHbZZfrmN7+pkSNH6qOPPtIvfvELXX755SovL5fL5Yqq8Xm9Xt1000266KKLdM455/i/fyh+Lj///HPH/x53ND5JuuaaazRixAgNHTpU77zzjm655RZt27ZNa9eujZrxvfvuu8rLy9MXX3yh/v3764knntD48eNVVVUVE59fZ+OTYuPzW716tTZv3qw333zzpK9F49/BuAwj0eTyyy/3//OECROUm5urESNG6E9/+lNIQwKC53vf+57/n88991xNmDBBo0eP1qZNmzRjxowwdmbfggULtGXLFr3yyivhbsURnY3vRz/6kf+fzz33XA0ZMkQzZszQRx99pNGjR4e6zR4ZO3asqqqq1NDQoD//+c+aO3euXnrppXC3FTSdjW/8+PFR//nV1NRo4cKF2rhxo1JSUsLdTlDE5W2ajIwMuVyuk2YW19XVKTMzM0xdWZOenq4zzzxT27dvV2ZmplpbW3XgwIGAmuPHkZmZ2eE427/WVU1qamrIA097T119NpmZmaqvrw/4+tGjR7V///6gjDvUPwOjRo1SRkaGtm/f7u8rGsb3k5/8RM8884xefPFFnX766f73Q/Vz6fTf487G15Hc3FxJCvgMI318brdbY8aMUU5OjkpLSzVx4kT953/+Z8x8fp2NryPR9vlVVlaqvr5e559/vpKSkpSUlKSXXnpJ9957r5KSkuTxeKLuM4zLMOJ2u5WTk6OysjL/e16vV2VlZQH3FCPRwYMH9dFHH2nIkCHKyclRnz59Asaxbds2VVdX+8eRl5end999N+CX28aNG5Wamuq/ZJmXlxdwjvaacPxZjBw5UpmZmQH9NDY26o033ggY04EDB1RZWemveeGFF+T1ev3/p5KXl6e//e1vOnLkiL9m48aNGjt2rAYOHOiviYRx79q1S/v27dOQIUP8fUXy+Iwx+slPfqInnnhCL7zwwkm3i0L1c+nU3+PuxteRqqoqSQr4DCN1fJ3xer1qaWmJ+s+vu/F1JNo+vxkzZujdd99VVVWV/zV58mTNnj3b/89R9xnamu4aQ1avXm2Sk5PNqlWrzPvvv29+9KMfmfT09ICZxZHgZz/7mdm0aZP55JNPzKuvvmry8/NNRkaGqa+vN8b4lm8NHz7cvPDCC+att94yeXl5Ji8vz398+/KtSy+91FRVVZkNGzaY0047rcPlWzfffLPZunWrWb58uaNLe5uamszbb79t3n77bSPJLFmyxLz99ttm586dxhjf0t709HTz1FNPmXfeecdceeWVHS7tPe+888wbb7xhXnnlFXPGGWcELH09cOCA8Xg85vvf/77ZsmWLWb16tenXr99JS1+TkpLMPffcY7Zu3WpKSkqCsvS1q/E1NTWZn//856a8vNx88skn5vnnnzfnn3++OeOMM8wXX3wRFeObP3++SUtLM5s2bQpYGnno0CF/Tah+Lp34e9zd+LZv325uv/1289Zbb5lPPvnEPPXUU2bUqFHm4osvjorxGWPMrbfeal566SXzySefmHfeecfceuutJiEhwTz33HPGmOj+/LobXyx8fh05cYVQtH2GcRtGjDHmvvvuM8OHDzdut9tMnTrVvP766+Fu6SQFBQVmyJAhxu12m2HDhpmCggKzfft2/9cPHz5sbrjhBjNw4EDTr18/80//9E9m9+7dAefYsWOHufzyy03fvn1NRkaG+dnPfmaOHDkSUPPiiy+aSZMmGbfbbUaNGmUeeughx8b04osvGkknvebOnWuM8S3v/dWvfmU8Ho9JTk42M2bMMNu2bQs4x759+8zVV19t+vfvb1JTU01hYaFpamoKqPn73/9uvvSlL5nk5GQzbNgws3jx4pN6+dOf/mTOPPNM43a7zdlnn23WrVvn6PgOHTpkLr30UnPaaaeZPn36mBEjRph58+ad9Bc3ksfX0dgkBfzMhPLnMth/j7sbX3V1tbn44ovNoEGDTHJyshkzZoy5+eabA/apiOTxGWPMD3/4QzNixAjjdrvNaaedZmbMmOEPIsZE9+fX3fhi4fPryIlhJNo+wwRjjLF3LQUAACB44nLOCAAAiByEEQAAEFaEEQAAEFaEEQAAEFaEEQAAEFaEEQAAEFaEEQAAEFaEEQAAEFaEEQAAEFaEEQAAEFaEEQAAEFaEEQAAEFb/HzWzQrPQLCRMAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X = np.array([[0,0], [0,1], [1,0], [1,1]]).T # The AND Operator, X is 2x4\n",
    "y = np.array([[0,0,0,1]]) # y is 1x4\n",
    "m = len(y[0])#数据数量\n",
    "alpha = 0.01#学习率\n",
    "num_of_iterations = 40000#迭代次数\n",
    "bias, w = nn(X, y, m, alpha, num_of_iterations)\n",
    "print(bias, w[0,0], w[0,1])\n",
    "fig = plt.figure()\n",
    "plt.clf()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7cee27cb",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
